package com.itheima.myanno3;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * @program: Myset
 * @description:
 * @author: xuejingjing
 * @create: 2021-06-30 19:13
 **/
public class AnnoDemo {
    public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, InvocationTargetException {
        //1，通过反射获取UserTest类的字节码文件对象
        Class aClass = Class.forName("com.itheima.myanno3.UseTest");
        
        //创建对象,根据字节码文件对象创建类对象
        UseTest useTest = (UseTest)aClass.newInstance();

        /**
         * 仔细想想，new对象和反射建立字节码对象的功能不一样，比如可以获取类所有的方法
         */
        //2，通过反射获取这个类里面所有的方法对象
        Method[] declaredMethods = aClass.getDeclaredMethods();
        //3,遍历数组，得到每一个方法对象

        for (Method declaredMethod : declaredMethods) {
            //方法上有Test注解，就运行它，没有Test注解，就不运行。
           // 判断当前方法上是否有指定的注解。

            if(declaredMethod.isAnnotationPresent(Test.class)){
                //执行这个成员方法。
                declaredMethod.invoke(useTest);
            }
        }
    }
}
